package com.example.demo.bean;

public class StringDemo {

    public static void main(String[] args) {

        String s = "123";
        String b = "123";
        System.out.println(s == b);

        System.out.println("===========================");

        /**
         * str1.intern() == str1就是上面例子中的情况，str1.intern()发现常量池中不存在“SEUCalvin”，因此指向了str1。 "SEUCalvin"在常量池中创建时，也就直接指向了str1了。两个都返回true就理所当然啦。
         */
//        String str1 = new String("SEU") + new String("Calvin");
//        System.out.println(str1.intern() == str1);
//        System.out.println(str1 == "SEUCalvin");

        System.out.println("===========================");

        /**
         * 也很简单，str2先在常量池中创建了“SEUCalvin”，那么str1.intern()当然就直接指向了str2，你可以去验证它们两个是返回的true。后面的"SEUCalvin"也一样指向str2。所以谁都不搭理在堆空间中的str1了，所以都返回了false。
         */
        String str2 = "SEUCalvin";//新加的一行代码，其余不变
        String str1 = new String("SEU")+ new String("Calvin");
        System.out.println(str1.intern() == str2);
        System.out.println(str1 == "SEUCalvin");

    }
}
